package IO;

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

/**
 * 字符流读数据
 *      Reader类中的方法
 *          int read():         每次读取一个字符，返回该字符对应的ASCII码值(整数)，
 *                              若达到流的末尾，返回-1
 *
 *       FileReader类的构造方法
 *          public  FileReader(String pathName)
 *          ①根据传入的字符串形式的路径，获取字符输入流对象
 *          ②注意因为Reader类是抽象类，所以需要通过多态的方式来实例化它的子类。
 */

public class SingleCharacter {
    public static void main(String[] args) throws IOException {
        //1.创建字符输入流对象，关联数据源文件。
        Reader reader = new FileReader("D:\\code\\1.txt\\");
        //2.定义变量，记录读取到的内容。
        int data;
        /*
            因为不知道循环次数，所以要用while循环来实现
        */
        //3.循环读取，只要条件满足就一直读，并将读取到的内容赋值给变量
        /* 错误写法如下：
            while (r.read() != -1) {
                  int data = r.read();
                  System.out.println(data);
             }
            如果你这样写的话，每次循环开始前都会先在括号中执行read()方法,
            然后在循环体中又执行了一次read()方法，相当于每次循环执行了两次read()方法，
            必然会导致输出结果事与愿违。
        */
        /* 正确写法如下： */
        while ((data = reader.read()) != -1)
        {  //赋值表达式的值，就等于赋值后变量的值。
            System.out.println(data);
        }
        //4.释放资源        //为防止遗忘，最好先释放资源
        reader.close();
    }
}
